package com.clstu.reflection;

import java.lang.reflect.Field;

/**
 * 研究Class对象的一些主要方法
 */
public class Class02 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException {

        String allPath = "com.clstu.Car";
        //<?>表示不确定的Java类型
        Class<?> cls = Class.forName(allPath);

        System.out.println(cls);//输出这是个class对象对应的是哪一个类

        System.out.println(cls.getClass());//输出Class类的信息

        System.out.println(cls.getPackage().getName());//得到包名

        System.out.println(cls.getName());//得到类名(全名)

        Object o = cls.newInstance();//创建对象实例
        System.out.println(o);

        Field brand = cls.getField("brand");//通过反射获取属性(不能获取私有属性)
        System.out.println(brand.get(o));

        brand.set(o,"宝马");//通过反射修改属性的值
        System.out.println(brand.get(o));

        //遍历得到所以的属性
        Field[] fields = cls.getFields();
        for (Field f:fields ) {
            System.out.println(f.get(o));
        }


    }
}
